// package com.liangtian.mdm.base.service.impl;
//
// import com.fasterxml.jackson.databind.JavaType;
// import com.fasterxml.jackson.databind.ObjectMapper;
// import com.liangtian.mdm.base.constants.MdmConstant;
// import com.liangtian.mdm.base.service.CacheService;
// import com.liangtian.mdm.system.menu.model.Menu;
// import com.liangtian.mdm.system.menu.service.MenuService;
// import com.liangtian.mdm.system.permission.model.SysRole;
// import com.liangtian.mdm.system.user.model.SysUser;
// import org.apache.commons.lang3.StringUtils;
// import org.springframework.beans.factory.annotation.Autowired;
// import org.springframework.cache.annotation.CacheConfig;
// import org.springframework.cache.annotation.Cacheable;
// import org.springframework.stereotype.Service;
//
// import java.util.List;
//
// @Service("cacheService")
// public class CacheServiceImpl implements CacheService {
//
//     @Autowired
//     private RoleService roleService;
//
//     @Autowired
//     private MenuService menuService;
//
//     @Autowired
//     private UserService userService;
//
//     @Autowired
//     private UserConfigService userConfigService;
//
//     @Autowired
//     private UserMapper userMapper;
//
//     @Autowired
//     private ObjectMapper mapper;
//
//
//     @Override
//     public SysUser getUser(String userAccount) throws Exception {
//
//
//         String userString = this.redisService.get(MdmConstant.USER_CACHE_PREFIX + userAccount);
//         if (StringUtils.isBlank(userString))
//             throw new Exception();
//         else
//             return this.mapper.readValue(userString, SysUser.class);
//     }
//
//     @Override
//     public List<SysRole> getRoles(String userAccount) throws Exception {
//         String roleListString = this.redisService.get(MdmConstant.USER_ROLE_CACHE_PREFIX + userAccount);
//         if (StringUtils.isBlank(roleListString)) {
//             throw new Exception();
//         } else {
//             JavaType type = mapper.getTypeFactory().constructParametricType(List.class, Role.class);
//             return this.mapper.readValue(roleListString, type);
//         }
//     }
//
//     @Override
//     public List<Menu> getPermissions(String userAccount) throws Exception {
//         String permissionListString = this.redisService.get(MdmConstant.USER_PERMISSION_CACHE_PREFIX + userAccount);
//         if (StringUtils.isBlank(permissionListString)) {
//             throw new Exception();
//         } else {
//             JavaType type = mapper.getTypeFactory().constructParametricType(List.class, Menu.class);
//             return this.mapper.readValue(permissionListString, type);
//         }
//     }
//
//
//     @Override
//     public void saveUser(SysUser user) throws Exception {
//         String userAccount = user.getuserAccount();
//         this.deleteUser(userAccount);
//         redisService.set(MdmConstant.USER_CACHE_PREFIX + userAccount, mapper.writeValueAsString(user));
//     }
//
//     @Override
//     public void saveUser(String userAccount) throws Exception {
//         SysUser user = userMapper.findDetail(userAccount);
//         this.deleteUser(userAccount);
//         redisService.set(MdmConstant.USER_CACHE_PREFIX + userAccount, mapper.writeValueAsString(user));
//     }
//
//     @Override
//     public void saveRoles(String userAccount) throws Exception {
//         List<Role> roleList = this.roleService.findUserRole(userAccount);
//         if (!roleList.isEmpty()) {
//             this.deleteRoles(userAccount);
//             redisService.set(MdmConstant.USER_ROLE_CACHE_PREFIX + userAccount, mapper.writeValueAsString(roleList));
//         }
//
//     }
//
//     @Override
//     public void savePermissions(String userAccount) throws Exception {
//         List<Menu> permissionList = this.menuService.findUserPermissions(userAccount);
//         if (!permissionList.isEmpty()) {
//             this.deletePermissions(userAccount);
//             redisService.set(MdmConstant.USER_PERMISSION_CACHE_PREFIX + userAccount, mapper.writeValueAsString(permissionList));
//         }
//     }
//
//
//     @Override
//     public void deleteUser(String userAccount) throws Exception {
//         userAccount = userAccount.toLowerCase();
//         redisService.del(MdmConstant.USER_CACHE_PREFIX + userAccount);
//     }
//
//     @Override
//     public void deleteRoles(String userAccount) throws Exception {
//         userAccount = userAccount.toLowerCase();
//         redisService.del(MdmConstant.USER_ROLE_CACHE_PREFIX + userAccount);
//     }
//
//     @Override
//     public void deletePermissions(String userAccount) throws Exception {
//         userAccount = userAccount.toLowerCase();
//         redisService.del(MdmConstant.USER_PERMISSION_CACHE_PREFIX + userAccount);
//     }
//
//     @Override
//     public void deleteUserConfigs(String userId) throws Exception {
//         redisService.del(MdmConstant.USER_CONFIG_CACHE_PREFIX + userId);
//     }
//
//     @Override
//     public String getUserSubordinates(Long deptId) throws Exception {
//         return redisService.get(MdmConstant.USER_PERMISSION_DEPT_DATA_CACHE_PREFIX+MdmConstant.UNDER_LINE+deptId);
//     }
//
//     @Override
//     public String saveUserSubordinates(Long deptId, String permissions) throws Exception {
//         return redisService.set(MdmConstant.USER_PERMISSION_DEPT_DATA_CACHE_PREFIX+MdmConstant.UNDER_LINE+deptId,permissions);
//     }
//
//     @Override
//     public void deleteUserSubordinates(Long deptId) throws Exception {
//         redisService.del(MdmConstant.USER_PERMISSION_DEPT_DATA_CACHE_PREFIX + MdmConstant.UNDER_LINE + deptId);
//     }
// }
